/*

这是一些常见的 std::set 操作：
    insert(val): 插入元素 val。
    find(val): 查找元素 val，返回指向该元素的迭代器。如果元素不存在，返回 end()。
    erase(val): 删除元素 val。
    size(): 返回 set 的元素个数。
    clear(): 清空 set。
*/
#include <iostream>
#include <set>
template <typename E>
void printSet(const std::set<E> &set)
{
    for (typename std::set<E>::const_iterator it = set.begin(); it != set.end(); it++)
    {
        std::cout << *it << " ";
    }
    std::cout << std::endl;
}

int main(int argc, char const *argv[])
{
    std::set<int> set = {1, 3, 2, 4, 0, 1, 2, 6, 4, 0};
    printSet(set);

    set.insert(100);
    set.insert(200);
    printSet(set);

    std::set<int>::const_iterator it = set.find(100); // find 返回这个元素的起始位置
    while (it != set.end())
    {
        std::cout << *it << std::endl;
        it++;
    }

    set.erase(100);
    printSet(set);

    int count = set.count(1);
    std::cout << count << std::endl;

    it = set.lower_bound(5);
    std::cout << *it << std::endl;
    it = set.upper_bound(5);
    std::cout << *it << std::endl;

    std::cout << set.size() << std::endl;
    std::cout << set.contains(1) << std::endl;
    std::cout << set.empty() << std::endl;

    return 0;
}
